home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
oper_sys
/
quartz
/
quartz10.lha
/
bin
/
MYCC_D
< prev
Wrap
Text File
|
1990-04-29
|
6KB
|
401 lines
#!/bin/sh
#ident "@(#)cfront:CC 1.20"
trap 'rm -f __err$$ $B$ISUF; exit' 1 2 3 15
#
installdirC=${installdirC-/usr/local/C++}
installdirQ=${installdirQ-/u1/tom/FastThreads}
#
C=
ccC=${ccC-atscc}
CF=
cfrontC=${cfrontC-${installdirC}/bin/cfront}
CPLUS=-Dc_plusplus=1
cppC=${cppC-/lib/cpp}
CRT0=
DASHR=
E=0
EE=0
FON=
G=0
GF=
GLIB=
HLIST=
I=${I-${installdirC}/incl}
ISUF="..c"
ldC=${ldC-ld}
LIBRARY=${LIBRARY-${installdirC}/lib/libC.a}
MCOUNT=${MCOUNT-${installdirQ}/lib/mcount.o}
MON=
munchC=${munchC-${installdirC}/bin/munch}
MVLIST=
NMFLAGS=${NMFLAGS-}
O=
OF=
OO="a.out"
OPTLIB=
P=
PLUSI=
PON=
PROFGCRT=${PROFGCRT-${installdirQ}/lib/crt0.o}
PROFMCRT=${PROFMCRT-${installdirC}/lib/mcrt0++.o}
PROFLIB=${PROFLIB-${installdirC}/lib/libC_p.a}
R=
SF=
SUF=
VERBOSE=
X=
Y=
XON=
Z=
for A do
case $A in
+h*) HLIST="$HLIST `echo $A | sed 's/+h//'`"
;;
+i) PLUSI=1
;;
+V) I="/usr/include"
O="$O $A"
;;
+x) XON=1
;;
+*) O="$O $A"
;;
-c*) CF=1
;;
-C) Y="$Y $A"
O="$O +C"
;;
-D*) Y="$Y $A"
;;
-E) PON=1
;;
-F) FON=1
;;
-Fc) FON=1
O="$O +L"
;;
-g) GF=-g
GLIB=-lg
;;
-I*) Y="$Y $A"
;;
-l*) OPTLIB="$OPTLIB $A"
;;
-M) MON=1
PON=1
Y="$Y $A"
;;
-o*) if [ "$A" != "-o" ]
then
OO=`echo $A | sed 's/^-o//'`
A="-o $OO"
else
OX=1
fi
OF="$OF $A"
Z="$Z $A"
;;
-O) P="$P $A"
;;
-p) P="$P $A"
CRT0=$PROFMCRT
;;
-pg) P="$P $A"
CRT0=$PROFGCRT
;;
-r) DASHR=1
Z="$Z $A"
;;
-S*) SF=1
;;
-U*) Y="$Y $A"
;;
-v) VERBOSE=1
;;
-Y) P="$P $A"
;;
-.c) echo "bad suffix option: -.c" 1>&2
;;
-.*) SUF=`expr "$A" : '-\(.*\)'`
;;
*.c | *.C | *.cc) if test -f $A
then
WITHEXT=`basename $A ""`
B=`basename $A .C`
if test $B = $WITHEXT
then
B=`basename $A .cc`
fi
if test $B = $WITHEXT
then
B=`basename $A .c`
fi
if test $PON
then
if test $SUF
then
if test $VERBOSE
then
echo "($cppC $Y $CPLUS -I$I $A > $B$SUF)"
fi
$cppC $Y $CPLUS -I$I $A >$B$SUF
E=$?
else
if test $VERBOSE
then
echo "($cppC $Y $CPLUS -I$I $A)"
fi
$cppC $Y $CPLUS -I$I $A
E=$?
fi
case $E in
0) ;;
*) G=0; break
;;
esac
elif test $FON
then
if test $SUF
then
if test $VERBOSE
then
echo "($cppC -C $Y $CPLUS -I$I $A | $cfrontC +f$A $O > $B$SUF)"
fi
$cppC -C $Y $CPLUS -I$I $A | $cfrontC +f$A $O > $B$SUF
E=$?
else
if test $VERBOSE
then
echo "($cppC -C $Y $CPLUS -I$I $A | $cfrontC +f$A $O)"
fi
$cppC -C $Y $CPLUS -I$I $A | $cfrontC +f$A $O
E=$?
fi
case $E in
0) ;;
*) G=0; break
;;
esac
else
if test $VERBOSE
then
echo "($cppC -C $Y $CPLUS -I$I $A | $cfrontC +L +f$A $O > $B$ISUF)"
fi
$cppC -C $Y $CPLUS -I$I $A | $cfrontC +L +f$A $O > $B$ISUF
E=$?
R=1
C="$C $B$ISUF"
case $E in
0) X="$X $B$ISUF"
Z="$Z $B.o"
MVLIST="$MVLIST $B"
G=1
;;
127) echo "Too many compilation errors" 1>&2
G=0
;;
999) echo "CC argument error" 1>&2
G=0
;;
1) echo "1 error" 1>&2
G=0
;;
*) echo "$E errors" 1>&2
G=0
;;
esac
fi
else
echo "$A not found" 1>&2
fi
;;
*.i) if test $PON
then
if test $MON
then
echo "CC -M $A incompatible: ignoring $A" 1>&2
else
echo "CC -E $A incompatible: ignoring $A" 1>&2
fi
elif test $FON
then
echo "CC -F $A incompatible: ignoring $A" 1>&2
else
B=`basename $A .i`
if test $VERBOSE
then
echo "($cfrontC +L +f$A $O < $A > $B$ISUF)"
fi
$cfrontC +L +f$A $O < $A > $B$ISUF
E=$?
R=1
C="$C $B$ISUF"
case $E in
0) X="$X $B$ISUF"
Z="$Z $B.o"
MVLIST="$MVLIST $B"
G=1
;;
*) G=0
;;
esac
fi
;;
*) if test $XON
then
O="$O +x$A"
XON=""
else
Z="$Z $A"
if test $OX
then
OO=$A
OF="$OF $A"
OX=""
else
G=1
X="$X $A"
fi
fi
;;
esac
done
case $G in
0) ;;
*) # generate code
if test "$PLUSI"
then
# cc -g will emit C source line information relative to file..c.
# To allow dbx to use this C source line information, we
# delete C++ source line information here.
for f in $C
do
sed "/^#/d" $f > temp$$
mv temp$$ $f
done
fi
if test "$HLIST" # +h: prepend Sequent asm macros
then
for f in $X
do
if test `echo $f | fgrep ..c`
then
cat $HLIST $f > temp$$
mv temp$$ $f
fi
done
fi
if test $SF # -S: generate .s files
then
if test $VERBOSE
then
echo "($ccC $GF $P -S $X)"
fi
$ccC $GF $P -S $X
EE=$?
for A in $MVLIST
do
mv $A..s $A.s
done
elif test $CF # -c: skip link edit
then
if test $VERBOSE
then
echo "($ccC $GF $P -c $X)"
fi
$ccC $GF $P -c $X
EE=$?
for A in $MVLIST
do
mv $A..o $A.o
done
else
if test $VERBOSE
then
echo "($ccC $GF $P -c $X)"
fi
$ccC $GF $P -c $X # compile, no load
EE=$?
for A in $MVLIST
do
mv $A..o $A.o
done
case $EE in
0) if test $VERBOSE
then
echo "($ccC $GF $P $Z $OPTLIB $LIBRARY 2> __err$$)"
fi
$ccC $GF $P $Z $OPTLIB $LIBRARY 2> __err$$ # load
EE=$?
if test $EE != 0 -o -s __err$$
then
cat __err$$
elif test "$DASHR" != 1 # find ctors/dtors
then
if test $VERBOSE
then
echo "(nm $NMFLAGS $OO | $munchC > __ctdt..c)"
fi
nm $NMFLAGS $OO | $munchC >__ctdt..c
case $? in
0) if test $VERBOSE
then
echo "(relinking not necessary)"
fi
;;
1) if test $VERBOSE
then
echo "($ccC $GF $P -c __ctdt..c)"
fi
$ccC $GF $P -c __ctdt..c
if test $CRT0
then
if test $VERBOSE
then
echo "($ldC -X $CRT0 $MCOUNT __ctdt..o $Z $OPTLIB $GLIB $PROFLIB -lc)"
fi
$ldC -X $CRT0 $MCOUNT __ctdt..o $Z $OPTLIB $GLIB $PROFLIB -lc # re-load
else
if test $VERBOSE
then
echo "($ccC $GF $P __ctdt..o $Z $OPTLIB $LIBRARY)"
fi
$ccC $GF $P __ctdt..o $Z $OPTLIB $LIBRARY # re-load
fi
rm __ctdt..o
EE=$?
;;
esac
if test "$GF" = "-g"
then
if test $VERBOSE
then
echo "(Leaving __ctdt..c for debugging)"
fi
else
rm __ctdt..c
fi
fi
;;
esac
rm __err$$
fi
esac
if test "$R"
then
if test ! "$PLUSI"
then
rm $C
fi
fi
case $E in
0) exit $EE
;;
*) exit $E
esac